#include "music.h"
#include <QUuid>
#include <QMediaPlayer>
#include <QCoreApplication>
#include <QDebug>
Music::Music()
    : isLike(false)
    , isHistory(false)
{

}

Music::Music(QUrl url)
    : isLike(false)
    , isHistory(false)
    , musicUrl(url)
{
    // 读取Url对应的歌曲文件信息，解析出元数据
    // 歌曲名称、歌曲作者、歌曲专辑、歌曲持续时长
    musicId = QUuid::createUuid().toString();
    parseMediaMetaMusic();
}


void Music::setMusicName(const QString& musicName)
{
    this->musicName = musicName;
}
void Music::setMusicSinger(const QString& musicSinger)
{
    this->musicSinger = musicSinger;
}
void Music::setMusicAlbum(const QString& musicAlbumn)
{
    this->musicAlbumn = musicAlbumn;
}
void Music::setMusicDuration(qint64 duration)
{
    this->duration = duration;
}
void Music::setIslike(bool isLike)
{
    this->isLike = isLike;
}
void Music::setIsHistory(bool isHistory)
{
    this->isHistory = isHistory;
}
void Music::setMusicUrl(QUrl musicUrl)
{
    this->musicUrl = musicUrl;
}

QString Music::getMusicName() const
{
    return musicName;
}
QString Music::getMusicSinger() const
{
    return musicSinger;
}
QString Music::getMusicAlbumn() const
{
    return musicAlbumn;
}
qint64 Music::getMusicDuration() const
{
    return duration;
}
bool Music::getIslike() const
{
    return isLike;
}
bool Music::getIsHistory() const
{
    return isHistory;
}
QUrl Music::getMusicUrl() const
{
    return musicUrl;
}

QString Music::getMusicId() const
{
    return musicId;
}

void Music::parseMediaMetaMusic()
{
    // 1.创建媒体播放对象
    QMediaPlayer player;

    // 2.设置媒体源，依靠setMedia方法解析元数据
    player.setMedia(musicUrl);

    // 3.因为setMedia不会等待音乐的加载就立马返回
    // 因此在通过mediaMeta方法获取元数据时，需要保证媒体已经添加完毕
    // 因为通过isMetaDataAvailable检测数据是否有效
    // 如果该方法返回true，说明加载完成

    while(!player.isMetaDataAvailable())
    {
        QCoreApplication::processEvents();
    }

    // 已经加载完成，可以获取有效的元数据
    if(player.isMetaDataAvailable())
    {
       musicName = player.metaData("Title").toString();
       musicSinger = player.metaData("Author").toString();
       musicAlbumn = player.metaData("AlbumTitle").toString();
       duration = player.duration();

       QString fileName = musicUrl.fileName();
       // 找到的位置
       int index = fileName.indexOf('-');

       // musicName为""的处理
       if(musicName.isEmpty())
        {
            if(index != -1)
            {
                musicName = fileName.mid(0, index).trimmed();

            }
            else
            {
                musicName = fileName.mid(0, fileName.indexOf('.'));
            }
        }
        if(musicSinger.isEmpty())
        {
            if(index != -1)
            {
                musicSinger = fileName.mid(index+1, fileName.indexOf('.')-index-1).trimmed();
            }
            else
            {
                musicSinger = "未知歌手";
            }
        }
        if(musicAlbumn.isEmpty())
        {
            musicAlbumn = "未知专辑";
        }

        qDebug() << fileName << musicSinger << ":" << musicAlbumn << ":" << duration;
    }

}
